package com.ruoyi.service.impl;

import com.ruoyi.domain.MobilCarInfo;
import com.ruoyi.mapper.MobilCarInfoMapper;
import com.ruoyi.service.IMobilCarInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 手机端用户车辆Service业务层处理
 *
 * @author ruoyi
 * @date 2025-01-20
 */
@Service
public class MobilCarInfoServiceImpl implements IMobilCarInfoService {
    @Autowired
    private MobilCarInfoMapper mobilCarInfoMapper;

    /**
     * 查询用户车辆列表
     *
     * @param mobilCarInfo 用户车辆
     * @return 用户车辆集合
     */
    @Override
    public List<MobilCarInfo> selectMobilCarInfoList(MobilCarInfo mobilCarInfo) {
        return mobilCarInfoMapper.selectMobilCarInfoList(mobilCarInfo);
    }

    /**
     * 根据用户ID查询车辆列表
     *
     * @param userId 用户ID
     * @return 用户车辆集合
     */
    @Override
    public List<MobilCarInfo> selectCarsByUserId(Integer userId) {
        return mobilCarInfoMapper.selectCarsByUserId(userId);
    }

    /**
     * 根据主键查询用户车辆
     *
     * @param id 用户车辆主键
     * @return 用户车辆
     */
    @Override
    public MobilCarInfo selectMobilCarInfoById(Integer id) {
        return mobilCarInfoMapper.selectMobilCarInfoById(id);
    }

    /**
     * 查询用户的默认车辆
     *
     * @param userId 用户ID
     * @return 默认车辆
     */
    @Override
    public MobilCarInfo selectDefaultCarByUserId(Integer userId) {
        return mobilCarInfoMapper.selectDefaultCarByUserId(userId);
    }

    /**
     * 新增用户车辆
     *
     * @param mobilCarInfo 用户车辆
     * @return 结果
     */
    @Override
    @Transactional
    public int insertMobilCarInfo(MobilCarInfo mobilCarInfo) {
        // 如果设置为默认车辆，需要先取消其他车辆的默认状态
        if (mobilCarInfo.getDefaultCar() != null && mobilCarInfo.getDefaultCar() == 1) {
            setOtherCarsNotDefault(mobilCarInfo.getUid());
        }
        
        // 设置默认值
        if (mobilCarInfo.getDeleted() == null) {
            mobilCarInfo.setDeleted(0);
        }
        
        return mobilCarInfoMapper.insertMobilCarInfo(mobilCarInfo);
    }

    /**
     * 修改用户车辆
     *
     * @param mobilCarInfo 用户车辆
     * @return 结果
     */
    @Override
    @Transactional
    public int updateMobilCarInfo(MobilCarInfo mobilCarInfo) {
        // 如果设置为默认车辆，需要先取消其他车辆的默认状态
        if (mobilCarInfo.getDefaultCar() != null && mobilCarInfo.getDefaultCar() == 1) {
            setOtherCarsNotDefault(mobilCarInfo.getUid());
        }
        
        return mobilCarInfoMapper.updateMobilCarInfo(mobilCarInfo);
    }

    /**
     * 删除用户车辆
     *
     * @param id 用户车辆主键
     * @return 结果
     */
    @Override
    public int deleteMobilCarInfoById(Integer id) {
        return mobilCarInfoMapper.deleteMobilCarInfoById(id);
    }

    /**
     * 设置默认车辆
     *
     * @param userId 用户ID
     * @param carId 车辆ID
     * @return 结果
     */
    @Override
    @Transactional
    public int setDefaultCar(Integer userId, Integer carId) {
        // 先取消该用户所有车辆的默认状态
        setOtherCarsNotDefault(userId);
        
        // 设置指定车辆为默认
        MobilCarInfo carInfo = new MobilCarInfo();
        carInfo.setId(carId);
        carInfo.setDefaultCar(1);
        
        return mobilCarInfoMapper.updateMobilCarInfo(carInfo);
    }

    /**
     * 取消用户其他车辆的默认状态
     *
     * @param userId 用户ID
     */
    private void setOtherCarsNotDefault(Integer userId) {
        List<MobilCarInfo> userCars = mobilCarInfoMapper.selectCarsByUserId(userId);
        for (MobilCarInfo car : userCars) {
            if (car.getDefaultCar() != null && car.getDefaultCar() == 1) {
                car.setDefaultCar(0);
                mobilCarInfoMapper.updateMobilCarInfo(car);
            }
        }
    }
}











